约 2258 字

约 11 分钟

#控制台界面

控制台程序也可以通过交互输入、进度条、颜色和光标控制获得不错的用户体验。本页介绍跨平台可用的常用手段。

#读取输入

Read-Host 从控制台读取一行文本:

> $name = Read-Host '请输入姓名'
> Write-Host "你好,$name"

需要隐藏输入(例如密码)时使用 -AsSecureString:

> $password = Read-Host '请输入密码' -AsSecureString

读取到的 SecureString 可以传给需要安全字符串的参数,但不要把它转换回明文再保存。

#显示进度

Write-Progress 在控制台顶部显示进度条,适合循环耗时较长的任务:

> 1..5 | ForEach-Object {
    Write-Progress -Activity '处理文件' -Status "第 $_ 项" -PercentComplete ($_ / 5 * 100)
    Start-Sleep -Milliseconds 300
}
> Write-Progress -Activity '处理文件' -Completed
  • -Activity 是进度条的标题。
  • -Status 显示当前步骤。
  • -PercentComplete 取 0 到 100。
  • 任务结束后用 -Completed 清除进度条。

进度输出只在支持进度显示的宿主中可见,重定向到文件时不会保留。

#访问宿主界面

$Host.UI.RawUI 提供窗口大小、标题、颜色等控制台属性:

> $Host.UI.RawUI.WindowSize
> $Host.UI.RawUI.WindowTitle = '部署工具'
> $Host.UI.RawUI.ForegroundColor = 'Green'

修改窗口大小时需要注意,某些宿主(如部分集成终端)不支持调整,可能抛出异常:

> $size = New-Object System.Management.Automation.Host.Size(120, 30)
> $Host.UI.RawUI.WindowSize = $size

#ANSI 转义序列

PowerShell 7 支持 ANSI 转义序列,用反引号转义字符 `e 表示 ESC:

> "`e[31m错误`e[0m"
> "`e[1;32m成功`e[0m"

常见格式:

序列效果
`e[31m红色前景
`e[32m绿色前景
`e[1m加粗
`e[0m重置样式

PowerShell 7.2 及以上还可以使用 $PSStyle:

> $PSStyle.Foreground.Red + '错误' + $PSStyle.Reset

如果输出被重定向到文件,颜色控制序列可能变成可见的乱码,必要时用 $PSStyle.OutputRendering = 'PlainText' 关闭。

#Out-ConsoleGridView

Out-ConsoleGridView 来自 Microsoft.PowerShell.ConsoleGuiTools 模块,提供可在终端中交互的表格视图:

> Install-Module Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
> Get-Process | Out-ConsoleGridView -Title '进程'

它需要单独安装模块,并要求终端支持交互式全屏绘制。相比之下,Out-GridView 只在 Windows 上可用,跨平台场景应优先考虑 Out-ConsoleGridView。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2